1
PyTorch 入門:為什麼張量如此重要
EvoClass-AI002第1課
00:00

PyTorch 入門:為什麼張量如此重要

PyTorch 是一個高度靈活、動態的開源框架,廣受深度學習研究與快速原型設計的青睞。其核心在於 張量,它是一種不可或缺的資料結構。張量是一種多維陣列,專為高效處理深度學習模型所需的數值運算而設計,並自動支援 GPU 加速自動加速。

1. 理解張量結構

在 PyTorch 中,每一筆輸入、輸出與模型參數都封裝在張量中。它們的功能與 NumPy 陣列相同,但針對特殊硬體(如 GPU)進行優化,使其在處理神經網絡所需的大型線性代數運算時效率更高。

定義張量的關鍵屬性包括:

  • 形狀:定義資料的維度,以元組形式表示(例如,一組影像的批量大小為 $4 \times 32 \times 32$)。
  • 資料類型:指定所儲存元素的數值類型(例如,torch.float32 用於模型權重,torch.int64 用於索引)。
  • 設備:表示物理硬體位置,通常為 'cpu''cuda'(NVIDIA GPU)。
動態圖與自動微分(Autograd)
PyTorch 使用指令式執行模型,表示計算圖是在操作執行時逐步建立的。這使得內建的自動微分引擎 Autograd 可以追蹤張量上的每一個操作,只要設置了 requires_grad=True 屬性即可,讓反向傳播期間能輕鬆計算梯度。
fundamentals.py
終端機bash — pytorch-env
> 已準備就緒。點選「執行」開始運行。
>
張量檢視器即時

執行程式碼以檢視活動中的張量
問題 1
哪個指令可建立一個 $5 \times 5$ 的張量,其中包含介於 0 到 1 之間均勻分佈的隨機數?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
問題 2
若張量 $A$ 在 CPU 上,而張量 $B$ 在 CUDA 裝置上,嘗試計算 $A + B$ 時會發生什麼情況?
會出現錯誤,因為運算要求所有張量位於同一裝置上。
PyTorch 會自動將 $A$ 移至 CUDA 裝置並繼續執行。
運算在 CPU 上執行,結果也返回至 CPU。
問題 3
深度學習中,模型權重與中間計算最常用的資料類型(dtype)是什麼?
torch.float32(單精度浮點數)
torch.int64(長整數)
torch.bool
torch.float64(雙精度浮點數)
挑戰:張量操作與形狀處理
為特定矩陣運算準備張量。
您有一個形狀為 $(10,)$ 的特徵向量 $F$。您需要將其與形狀為 $(10, 5)$ 的權重矩陣 $W$ 相乘。為使矩陣乘法(MatMul)成功,$F$ 必須是二維的。
步驟 1
在與 $W$ 相乘前,$F$ 的形狀應為何?
解答:
內部維度必須匹配,因此 $F$ 必須為 $(1, 10)$。接著 $(1, 10) @ (10, 5) \rightarrow (1, 5)$。
程式碼:F_new = F.unsqueeze(0)F_new = F.view(1, -1)
步驟 2
對 $F_{new}$ 與 $W$(形狀為 $(10, 5)$)執行矩陣乘法。
解答:
此運算非常直接,就是標準的矩陣乘法。
程式碼:output = F_new @ Woutput = torch.matmul(F_new, W)
步驟 3
哪個方法可明確返回具有指定維度的張量,並允許您將張量重新展平為 $(50,)$?(假設 $F$ 最初為 $(5, 10)$,現已展平。)
解答:
使用 viewreshape 方法。最快速的展平方式通常是使用 -1 作為某一維度的佔位符。
程式碼:F_flat = F.view(-1)F_flat = F.reshape(50)